package pe.com.astech.web.dao.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.Repository;

import pe.com.astech.web.bean.EmpleadoBean;
import pe.com.astech.web.bean.PerfilBean;
import pe.com.astech.web.bean.UrlBean;
import pe.com.astech.web.bean.UsuarioBean;
import pe.com.astech.web.dao.UsuarioDao;
import pe.com.astech.web.exception.DBException;

@Repository
public class UsuarioDaoImpl implements UsuarioDao {

	private JdbcTemplate jdbcTemplate;
	
	private static final Log log = LogFactory.getLog(UsuarioDaoImpl.class);

	@Autowired
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

	@Override
	public EmpleadoBean validarUsuario(String cadenaTrazabilidad,
			UsuarioBean usuarioBean){
		
		 	String query = "select e.id_empleado,e.nombre as nombre_empleado,e.apellido_paterno,e.apellido_materno, " +
						    "p.nombre,u.url,u.nombre as nombre_url  from empleado e " +
							"inner join perfil p on p.id_perfil = e.perfil_id_perfil " +
							"inner join url u on u.perfil_ID = p.id_perfil " +
							"inner join usuario usu on usu.empleado_id_empleado=e.id_empleado " +
							"where usu.usuario=:usuario and usu.contrasenia=:contrasenia";
			 	EmpleadoBean empleadoBean = new EmpleadoBean();
			 	log.info(cadenaTrazabilidad + " query : " + query);
		 	
			 	MapSqlParameterSource parameters = new MapSqlParameterSource();
			 	parameters.addValue("usuario", usuarioBean.getUsuario());
			 	parameters.addValue("contrasenia", usuarioBean.getContrasenia());
		 	
		 		PerfilBean perfilBean = new PerfilBean();
			 	List<UrlBean> listUrlBean = new ArrayList<UrlBean>();
			 	
			 	NamedParameterJdbcTemplate namedParameterJdbcTemplate= new NamedParameterJdbcTemplate(jdbcTemplate);
		        List<Map<String,Object>> usrRows = namedParameterJdbcTemplate.queryForList(query,parameters);
		         
		        for(Map<String,Object> usrRow : usrRows){
		        	UrlBean urlBean = new UrlBean();
		        	urlBean.setUrl(String.valueOf(usrRow.get("url")));
		        	urlBean.setNombre(String.valueOf(usrRow.get("nombre_url")));
		            listUrlBean.add(urlBean);
		            
		            perfilBean.setNombre(String.valueOf(usrRow.get("nombre")));
		            empleadoBean.setId_empleado(String.valueOf(usrRow.get("id_empleado")));
		            empleadoBean.setNombre(String.valueOf(usrRow.get("nombre_empleado")));
		            empleadoBean.setApellido_paterno(String.valueOf(usrRow.get("apellido_paterno")));
		            empleadoBean.setApellido_materno(String.valueOf(usrRow.get("apellido_materno")));
		            
		            log.info(cadenaTrazabilidad + " elemento :" + empleadoBean.toString());
		        }
		        perfilBean.setListUrl(listUrlBean);
		        empleadoBean.setPerfilBean(perfilBean);
		 	
	        return empleadoBean;
	}

}
